package ar.uba.fi.algo3.algoflight.view.aviones;

import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

import ar.uba.fi.algo3.algoflight.model.aviones.Avion;
import ar.uba.fi.algo3.algoflight.model.aviones.AvionComputarizado;
import ar.uba.fi.algo3.algoflight.model.aviones.AvionPesado;
import ar.uba.fi.algo3.algoflight.model.aviones.AvionSimple;
import ar.uba.fi.algo3.algoflight.model.aviones.Helicoptero;

public class FactoryVistaAvion {

	private Map<Class<? extends Avion>, Class<? extends VistaAvion>> listaDeVistasAviones;

	public FactoryVistaAvion() {
		listaDeVistasAviones = new HashMap<Class<? extends Avion>, Class<? extends VistaAvion>>();
		this.rellenarListaAviones();
	}

	private void rellenarListaAviones() {
		listaDeVistasAviones.put(AvionComputarizado.class,
				VistaAvionComputarizado.class);
		listaDeVistasAviones.put(AvionPesado.class, VistaAvionPesado.class);
		listaDeVistasAviones.put(AvionSimple.class, VistaAvionSimple.class);
		listaDeVistasAviones.put(Helicoptero.class, VistaHelicoptero.class);
	}

	public VistaAvion crearVistaAvion(Avion avion) throws IOException {

		VistaAvion vistaAvion = null;
		Constructor<?>[] constructores = listaDeVistasAviones.get(
				avion.getClass()).getConstructors();

		try {
			vistaAvion = (VistaAvion) constructores[0].newInstance(avion);
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}

		return vistaAvion;
	}
}
